<?php

/**
 * Класс для работы с конфигурацией сайта
 */

class Meta
{
    /**
     * Singleton
     *
     * @var obj Meta
     */
    private static $_instance = null;
    
    /**
     * Соединение с базой
     *
     * @var DbSimple
     */
    private $_dbh;
    
    /**
     * Данные из таблицы
     *
     * @var array
     */
    private $_data = array();
    
    public static function getInstance()
    {
        return self::$_instance !== null ? self::$_instance : new self();
    }
    
    /**
     * Запрещаем прямое создание объекта
     *
     */
    private function __construct()
    {
        $this->_dbh = Framework_Registry::get('dbh');
    }
    
    /**
     * Подгружаем необходимые записи и записываем их во внутренний массив
     *
     * @param mixed $index
     * @return Meta
     */
    public function load($index)
    {
        $rows = $this->_dbh->selectCol('SELECT meta_name AS ARRAY_KEY, meta_value
                                        FROM meta
                                        WHERE meta_name IN (?a)',
                                     is_array($index) ? $index : array($index));
        $this->_data = array_merge($this->_data, $rows);
        
        return $this;
    }
    
    /**
     * Изменяет значение параметра в базе и в массиве.
     *
     * @param string $name
     * @param string $value
     * @return int
     */
    public function set($name, $value)
    {
        $rows = @$this->_dbh->query('UPDATE meta SET meta_value=?
                                     WHERE meta_name=?',
                                    $value, $name);
        $this->_data[$name] = $rows ? $value : null;
        
        return $rows;
    }
    
    /**
     * Alias __get. Испоьзуется если нужно значение по умолчанию
     *
     * @return string
     */
    public function get($index, $default = null)
    {
        $result = $this->__get($index);
        
        return $result === null ? $default : $result;
    }
    
    /**
     * Магический метод
     *
     * @param string $index
     * @return string
     */
    public function __get($index)
    {
        $result = null;
        if (array_key_exists($index, $this->_data)) {
            $result = $this->_data[$index];
        }
        
        return $result;
    }
}